#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

//验证FILE内封装有fd
int main()
{
    printf("stdin:%d\n",stdin->_fileno);
    printf("stdout:%d\n",stdout->_fileno);
    printf("stderr:%d\n",stderr->_fileno);
    return 0;
}


////验证0、1、2对应stdin、stdout、stderr
//int main()
//{
//    //对stdout
//    fprintf(stdout,"hello stdout!\n");
//    const char* s1="hello 1!\n";
//    write(1,s1,strlen(s1));//系统调用接口，fd=1，用于验证是否对应stdout
//
//    printf("----------------\n");
//
//    //对stdin
//    int a=0;
//    printf("stdin|输入整数a的值：");
//    fscanf(stdin,"%d",&a);
//    printf("stdin|实际读取a=%d\n",a);
//
//    printf("fd=0| 输入字符串：");
//    fflush(stdout);
//    char buffer[20]="";
//    ssize_t ret=read(0,buffer,sizeof(buffer));
//    if(ret>0)//read会返回读取到的实际值个数
//    {
//        buffer[ret]='\n';
//        printf("fd=0|实际读取：:%s\n",buffer);
//    }
//
//    return 0;
//}
//


////对文件描述符返回值问题说明
//int main()
//{
//    //打开文件：系统接口
//    umask(0);
//    int fd1 = open("log01.txt",O_WRONLY | O_CREAT | O_TRUNC ,0664);
//    int fd2 = open("log02.txt",O_WRONLY | O_CREAT | O_TRUNC ,0664);
//    int fd3 = open("log03.txt",O_WRONLY | O_CREAT | O_TRUNC ,0664);
//    int fd4 = open("log04.txt",O_WRONLY | O_CREAT | O_TRUNC ,0664);
//
//    //文件操作
//    printf("open success,fd:%d\n",fd1);
//    printf("open success,fd:%d\n",fd2);
//    printf("open success,fd:%d\n",fd3);
//    printf("open success,fd:%d\n",fd4);
//
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//    return 0;
//}


////文件读操作演示
//int main()
//{
//    //打开文件：系统接口
//    umask(0);
//    //int fd = open("log01.txt",O_WRONLY | O_CREAT | O_APPEND ,0664);
//    //以只读的方式打开，就不需要三参数的open(正常情况下文件本身存在，否则读了没意义)
//    int fd = open("log01.txt",O_RDONLY);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;//文件打开失败
//    }
//
//    //文件操作
//    char buffer[128];//用于存储从文件中读取到的字符
//    memset(buffer,'\0',sizeof(buffer));
//    read(fd,buffer,sizeof(buffer));
//    printf("The result:%s",buffer);
//    close(fd);
//    return 0;
//}




////文件写操作演示
//int main()
//{
//    //打开文件：系统接口
//    umask(0);
//    int fd = open("log01.txt",O_WRONLY | O_CREAT | O_APPEND ,0664);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;//文件打开失败
//    }
//
//    //文件操作
//    printf("open success,fd:%d\n",fd);
//    //const char* str1=" A New Day Has Come\n";
//    const char* str1="I know I would make it through\n";
//    write(fd,str1,strlen(str1));
//
//    close(fd);
//    return 0;
//}



//
//#define ONE 0x1 //0000 0001
//#define TWO 0x2 //0000 0010
//#define THREE 0x4 //0000 0100 
//
////写一个show函数，其能够根据传入的flags参数选择，达成多重条件
//void show(int flags)
//{
//    if(flags & ONE)
//    { printf("Achieve condition ONE\n"); }
//
//    if(flags & TWO)
//    { printf("Achieve condition TWO\n");  }
//
//    if(flags & THREE)
//    { printf("Acheive condition THREE\n"); }
//}
//
//int main()
//{
//    show(ONE);
//    printf("-----------\n");
//    show(ONE | TWO);
//    printf("-----------\n");
//    show(ONE | TWO | THREE);
//    printf("-----------\n");
//    show(TWO);
//    printf("-----------\n");
//
//    return 0;
//}
